<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <script>
        // 1）函数参数默认值
        // 在ES6以前，我们无法给一个函数设置默认值，只能采用变通写法
        /* function add(a, b) {
            // 判断b是否为空，为空就给默认值
            b = b || 1;
            return a + b;
        }
        // 传一个参数
        console.log(add(10, 1)); */

        // 现在可以这么写：直接给参数写上默认值，没传就会自动使用默认值
        /* function add2(a, b = 1) {
            return a + b;
        }
        // 传一个参数
        console.log(add2(10));

        // 2）不定参数
        function fun(...values) {
            console.log(values.length);
        }
        fun(1, 2);  // 2
        fun(1, 2, 3, 4); // 4 */

        // 3）箭头函数
        // 以前声明一个方法
        // 一个参数时：
        /* var print = function(obj) {
            console.log(obj);
        } */
        // 可以简写为：
        /* var print = obj => console.log(obj);
        // 测试调用
        print(100); */

        // 两个参数的情况：
        /* var sum = function(a, b) {
            return a + b;
        }
        // 简写为：
        var sum2 = (a, b) => a + b;
        // 测试调用
        console.log(sum2(10,20)); // 30

        // 代码不止一行，可以用 {} 括起来
        var sum3 = (a, b) => {
            let c = a + b;
            return c;
        }
        // 测试调用
        console.log(sum3(10,20)); // 30 */

        // 4）实战：箭头函数结合解构表达式
        // 需求：声明一个对象，hello方法需要对象的个别属性
        // 以前的方式：
        const person = {
            name: "jack",
            age: 21,
            language: ['java', 'js', 'css']
        };

        /* function hello() {
            console.log("hello," + person.name);
        }

        hello(); */

        // 新的方式
        /* function hello({name}) {
            console.log("hello," + name);
        } */
        // 上面的写法还能改成
        var hello = ({name}) => console.log("hello," + name);
        hello(person);
    </script>
</body>
</html>